package cn.rocky.pandacodegen.domain.definition;

import cn.rocky.pandacodegen.domain.convert.ColumnTypeConverter;
import lombok.Data;

/**
 * 表字段信息定义
 *
 * @author Rocky
 * @date 2023/06/29
 */
@Data
public class ColumnDefinition {

    /**
     * 数据库字段名
     */
    private String columnName;
    /**
     * 数据库类型
     */
    private String type;
    /**
     * 是否自增
     */
    private Boolean isIdentity;
    /**
     * 是否主键
     */
    private Boolean isPk;
    /**
     * 字段注释
     */
    private String comment;
    /**
     * 字段长度
     */
    private Integer maxLength;
    /**
     * 小数位长度
     */
    private Integer scale;

    /**
     * 字段是否允许为null
     */
    private boolean isNullable = false;

    /**
     * 获得基本类型,int,float
     *
     * @return 返回基本类型
     */

    public String getFieldType() {
        return getColumnTypeConverter().convertType(type);
    }
    /**
     * 获得装箱类型,Integer,Float
     *
     * @return 返回装箱类型
     */
    public String getFieldTypeBox() {
        return getColumnTypeConverter().convertTypeBox(getType());
    }

    public ColumnTypeConverter getColumnTypeConverter() {
        throw new UnsupportedOperationException("未覆盖 cn.rocky.pandacodegen.domain.definition.ColumnDefinition.getColumnTypeConverter方法");
    }
    
    public void setComment(String comment) {
        this.comment = comment;
    }

    public void setIsNullable(Boolean isNullable) {
        this.isNullable = isNullable;
    }
}
